package leetcode1;

import java.util.Arrays;

public class Day4 {

    //1004.k次取反后最大化的数组和
    public int largestSumAfterKNegations(int[] nums, int k) {
        int m=0,minAbs=Integer.MAX_VALUE,n=nums.length;
        for(int x : nums) {
            if(x<0) m++;//记录小于0的个数
            minAbs = Math.min(minAbs,Math.abs(x));//找出绝对值最小的
        }

        int ret=0,i=0;
        if(m > k) {
            Arrays.sort(nums);
            //负数个数 > k
            while(k>0) {
                ret += -nums[i];
                k--;
                i++;
            }
            for(;i<n;i++) {
                ret += nums[i];
            }
        }else {
            //负数个数较少
            //先把所有负数变成正数
            for(;i<n;i++) {
                ret += Math.abs(nums[i]);
            }
            k = k-m;
            if(k%2 != 0) {
                ret -= minAbs*2;
            }
        }
        return ret;
    }
}
